home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / dev / c / GSys.lha / gsys / gsystem / GBuffer.cpp next >
Encoding:
C/C++ Source or Header  |  2000-10-16  |  3.8 KB  |  237 lines

  1.  
  2. /* Author Anders Kjeldsen */
  3.  
  4. #ifndef GBUFFER_CPP
  5. #define GBUFFER_CPP
  6.  
  7. #include "gsystem/GBuffer.h"
  8. #include "gsystem/GObject.cpp"
  9.  
  10. GBuffer::GBuffer(GSTRPTR filename, GUWORD start, GUWORD len)
  11. {
  12.     memset((void *)this, 0, sizeof (class GBuffer) );
  13. //    WriteLog("Init\n");
  14.     if ( InitGObject("GBuffer") )
  15.     {
  16. //        WriteLog("Inited\n");
  17.         Locked = TRUE;
  18.         Buffer = NULL;    // Load() checks if Buffer is non-zero!
  19. //        WriteLog("Load\n");
  20.         if ( Load(filename, start, len) )
  21.         {
  22.         }
  23.     }
  24. }
  25.  
  26. GBuffer::GBuffer(GUWORD size)
  27. {
  28.     memset((void *)this, 0, sizeof (class GBuffer) );
  29.     if ( InitGObject("GBuffer") )
  30.     {
  31.         Locked = TRUE;
  32.         Buffer = (GAPTR) new char[size];
  33.  
  34.         if (Buffer)
  35.         {
  36.             Size = size;
  37.             FilePtr = 0;
  38.         }
  39.     }
  40. }
  41.  
  42. GBuffer::~GBuffer()
  43. {
  44.     if (Buffer)
  45.     {
  46.         delete Buffer;
  47.     }
  48. }
  49.  
  50. BOOL GBuffer::InitGBuffer(GSTRPTR filename, GUWORD start, GUWORD len, GSTRPTR objtype)
  51. {
  52.     if (Buffer)
  53.     {
  54.         delete Buffer;
  55.     }
  56. //    WriteLog("memset\n");
  57.     memset((void *)this, 0, sizeof (class GBuffer) );
  58.     if ( InitGObject(objtype) )
  59.     {
  60.  
  61.         Locked = TRUE;
  62.         Buffer = NULL;
  63. //        WriteLog("Load\n");
  64.         if ( Load(filename, start, len ) )
  65.         {
  66.             return TRUE;
  67.         }
  68.         return FALSE;
  69.     }
  70.     return FALSE;
  71. }
  72.  
  73. BOOL GBuffer::InitGBuffer(GUWORD size, GSTRPTR objtype)
  74. {
  75.     if (Buffer)
  76.     {
  77.         delete Buffer;
  78.     }
  79.  
  80.     memset((void *)this, 0, sizeof (class GBuffer) );
  81.     if ( InitGObject(objtype) )
  82.     {
  83.         Locked = TRUE;
  84.         Buffer = (GAPTR) new char[size];
  85.  
  86.         if (Buffer)
  87.         {
  88.             Size = size;
  89.             FilePtr = 0;
  90.             return TRUE;
  91.         }
  92.         return FALSE;
  93.     }
  94.     return FALSE;
  95. }
  96.  
  97. GAPTR GBuffer::LockBuf() 
  98.     if (!Buffer)
  99.     {
  100. //        WriteLog("Loading of backed up memory is not available yet!\n");
  101.         return NULL;
  102.     }
  103.     else
  104.     {
  105.         Locked = TRUE; 
  106.         return Buffer;
  107.     }
  108.  
  109. /*
  110.  
  111. BOOL GBuffer::Load(GSTRPTR filename, GUWORD start, GUWORD len)
  112. {
  113.     if (Buffer)
  114.     {
  115.         delete Buffer;
  116.         Buffer = NULL;
  117.     }
  118.  
  119.     HANDLE fh;
  120.     DWORD SizeHigh;
  121.     SizeHigh = 0;
  122.  
  123.     if (filename)
  124.     {
  125.         if ( fh = CreateFile( filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL) )
  126.         {
  127.             Size = GetFileSize(fh, &SizeHigh);
  128.             if (Size > start)
  129.             {
  130.                 if ( Size != -1)
  131.                 {
  132.                     FileSize = Size;
  133.                     if ( len != 0 )
  134.                     {
  135.                         GWORD delta = Size-(start+len);
  136.                         if (delta < 0)
  137.                         {
  138.                             len+= delta;
  139.                         }
  140.                         Size = len;
  141.                     }
  142.                     else
  143.                     {
  144.                         len = Size;
  145.                     }
  146.  
  147.                     Buffer = (GAPTR) new char[Size+16];
  148.                     if (Buffer)
  149.                     {
  150.                         if ( SetFilePointer(fh, start, NULL, FILE_BEGIN) != -1 )
  151.                         {
  152.                             FilePtr = start;
  153.                             strncpy(FileName, filename, 255);
  154.                             SizeHigh = 0;
  155.                             ReadFile(fh, Buffer, Size, &SizeHigh, 0);
  156.                             ((char *)Buffer)[Size] = 0;
  157.                             return TRUE;
  158.                         }
  159.                         else WriteLog("Load: SetFilePointer Failed\n");
  160.                     }
  161.                 }
  162.             }
  163.             CloseHandle(fh);
  164.         }
  165.     }
  166.     return FALSE;
  167. }
  168. */
  169. /*
  170. BOOL GBuffer::Seek(GWORD offset, GUWORD seekmode)
  171. {
  172.     if ( seekmode == GSEEK_START ) FilePtr = 0;
  173.     else if ( seekmode == GSEEK_END ) FilePtr = FileSize;
  174.  
  175.     if (*FileName && FileSize)
  176.     {
  177.         FilePtr += offset;
  178.         if (FilePtr && (FilePtr < FileSize) )
  179.         {
  180.             return TRUE;
  181.         }
  182.     }
  183.     return FALSE;
  184. }
  185.  
  186. // note: it updates the FilePtr !
  187. GUWORD GBuffer::Peek(GUWORD len)
  188. {
  189.     HANDLE fh;
  190.     DWORD SizeHigh;
  191.     SizeHigh = 0;
  192.     GWORD delta;
  193.     
  194.     if (*FileName && FileSize)
  195.     {
  196.         if ( fh = CreateFile( FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL) )
  197.         {
  198.             if (FileSize > FilePtr)
  199.             {
  200.                 delta = FileSize-(FilePtr+len);
  201.                 if (delta < 0)
  202.                 {
  203.                     len+= delta;
  204.                 }
  205.  
  206.                 if ( Size != len )
  207.                 {
  208.                     if (Buffer) delete Buffer;
  209.                     Buffer = (GAPTR) new char[len+16];
  210.                     ((char *)Buffer)[len] = 0;
  211.                 }
  212.                 Size = len;
  213.                 if (Buffer)
  214.                 {
  215.                     if ( SetFilePointer(fh, FilePtr, NULL, FILE_BEGIN) != -1 )
  216.                     {
  217.                         FilePtr += Size;
  218. //                        SizeHigh = 0;
  219.                         ReadFile(fh, Buffer, Size, &SizeHigh, 0);
  220.                         return Size;
  221.                     }
  222.                     else WriteLog("Load: SetFilePointer Failed\n");
  223.                 }
  224.             }
  225.             CloseHandle(fh);
  226.         }
  227.     }
  228.     return FALSE;
  229. }
  230.  
  231. */
  232.  
  233. #endif /* GBUFFER_CPP */
  234.  
  235.